home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1998 June / SGI Freeware 1998 June.iso / dist / fw_UMINNgopher.idb / usr / freeware / src / gopher_1.12 / object / STRstring.c.z / STRstring.c
C/C++ Source or Header  |  1997-09-09  |  4KB  |  210 lines

  1. /********************************************************************
  2.  * $Author: drich $
  3.  * $Revision: 1.1 $
  4.  * $Date: 1995/10/03 04:09:48 $
  5.  * $Source: /proj/freeware1.0/gopher1.12/src/object/RCS/STRstring.c,v $
  6.  * $Status: $
  7.  *
  8.  * Paul Lindner, University of Minnesota CIS.
  9.  *
  10.  * Copyright 1991, 1992 by the Regents of the University of Minnesota
  11.  * see the file "Copyright" in the distribution for conditions of use.
  12.  *********************************************************************
  13.  * MODULE: STRstring.c
  14.  * Implement dynamic string library functions
  15.  *********************************************************************
  16.  * Revision History:
  17.  * $Log: STRstring.c,v $
  18.  * Revision 1.1  1995/10/03  04:09:48  drich
  19.  * gopher 1.2 check-in
  20.  *
  21.  * Revision 1.1  1992/12/10  23:27:52  lindner
  22.  * gopher 1.1 release
  23.  *
  24.  *
  25.  *********************************************************************/
  26.  
  27.  
  28. #include "STRstring.h"
  29. #include "String.h"
  30. #include "Malloc.h"
  31.  
  32. /*
  33.  * Make a new string, however use supplied parameter to set it.
  34.  */
  35. String *
  36. STRnewSet(in)
  37.   char *in;
  38. {
  39.      register String *temp;
  40.      register int len;
  41.  
  42.      temp = (String *) malloc(sizeof(String));
  43.      temp->data = NULL;
  44.  
  45.      if (in == NULL)
  46.       return(temp);
  47.  
  48.      len = strlen(in) + 1;
  49.  
  50.      temp->data = (char *) malloc(len * sizeof(char*));
  51.      strcpy(temp->data, in);
  52.           temp->len = len-1;
  53.  
  54.      return(temp);
  55. }
  56.      
  57. /*
  58.  * Make a new string, don't set anything for default yet.
  59.  */
  60.  
  61. String *
  62. STRnew()
  63. {
  64.      String *temp;
  65.  
  66.      temp = (String *) malloc(sizeof(String));
  67.      temp->data = NULL;
  68.  
  69.      return(temp);
  70. }
  71.  
  72. /*
  73.  * Destroy a string
  74.  */
  75.  
  76. void
  77. STRdestroy(st)
  78.   String *st;
  79. {
  80.      if (st != NULL) {
  81.       if (st->data != NULL)
  82.            free(st->data);
  83.       free(st);
  84.      } else
  85.       perror("STRdestroy: non existant string!\n");
  86.  
  87. }
  88.  
  89.  
  90. /*
  91.  * Clear out all the crud...
  92.  */
  93.  
  94. void 
  95. STRinit(st) 
  96.   String *st;
  97. {
  98.      if (st != NULL) {
  99.       
  100.       st->len  = 0;
  101.       if (st->data != NULL)
  102.            free(st->data);
  103.       st->data = NULL;
  104.      } else
  105.       perror("STRinit, non existant string!");
  106. }
  107.  
  108. /*
  109.  * Set a string value
  110.  */
  111.  
  112. void
  113. STRset(st, str)
  114.   String *st;
  115.   char   *str;
  116. {
  117.      register int len;
  118.  
  119.      if (str == NULL)
  120.       return;
  121.  
  122.      if (*str == '\0')
  123.       len = 1;
  124.      else
  125.       len = strlen(str) + 1;
  126.  
  127.      /* Uninitialized data... */
  128.  
  129.      if (st->data == NULL) {
  130.       st->data = (char *) malloc(len);
  131.       strcpy(st->data, str);
  132.       st->len = len-1;
  133.      }
  134.  
  135.      /** Something's already there... **/
  136.  
  137.      else {
  138.       if (STRlen(st) > len)
  139.            strcpy(st->data, str);
  140.       else {
  141.            char *temp;
  142.  
  143.            temp = (char *) realloc(st->data, len);
  144.            /*** Should check for NULL ... ***/
  145.            st->data = temp;
  146.            strcpy(st->data, str);
  147.       }
  148.      }
  149. }
  150.  
  151. /*
  152.  * Add a string to the end of the string that's there already
  153.  */
  154.  
  155. String*
  156. STRcat(st, cp)
  157.   String *st;
  158.   char *cp;
  159. {
  160.      int len;
  161.      char *temp;
  162.  
  163.      if (cp == NULL)
  164.       return(NULL);
  165.      
  166.      if (STRlen(st) == 0) {
  167.       STRset(st, cp);
  168.       return(st);
  169.      }
  170.  
  171.      len = strlen(cp) + STRlen(st) + 1;
  172.  
  173.      temp = (char *) malloc(len);
  174.      strcpy(temp, STRget(st));
  175.      strcat(temp, cp);
  176.  
  177.      STRset(st, temp);
  178.      
  179.      free(temp);
  180.  
  181.      return(st);
  182. }
  183.  
  184.  
  185. int
  186. STRcmp(st1, st2)
  187.   String *st1;
  188.   String *st2;
  189. {
  190.      register char *cp1, *cp2;
  191.  
  192.      cp1 = STRget(st1);
  193.      cp2 = STRget(st2);
  194.  
  195.      if (cp1 == NULL) 
  196.       return(- !0);
  197.      else if (cp2 == NULL)
  198.       return( !0);
  199.      else
  200.       return(strcmp(cp1, cp2));
  201. }
  202.      
  203. String*
  204. STRcpy(s1, s2)
  205.   String *s1;
  206.   String *s2;
  207. {
  208.      STRset(s1, STRget(s2));
  209. }
  210.